#include "dma.h"
#include "usart.h"

//可以不用dma中断，dma发送完成不代表串口发送完成

void MX_DMA_Init(void) 
{
	/* DMA controller clock enable */
	__HAL_RCC_DMA1_CLK_ENABLE();
	__HAL_RCC_DMA2_CLK_ENABLE();

	/* DMA interrupt init */
	/* DMA1_Channel2_IRQn interrupt configuration */
	HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 2, 0);
	HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
	/* DMA1_Channel4_IRQn interrupt configuration */
	HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 2, 0);
	HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
	/* DMA1_Channel7_IRQn interrupt configuration */
	HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 2, 0);
	HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
	/* DMA2_Channel4_5_IRQn interrupt configuration */
	HAL_NVIC_SetPriority(DMA2_Channel4_5_IRQn, 2, 0);
	HAL_NVIC_EnableIRQ(DMA2_Channel4_5_IRQn);
}

/*
由串口发送队列调用
n取值0-3，对应串口1-4
*/
void dma_uart_tx(u8 n,u16 len)
{
	switch(n){
		case 0:{
			HAL_DMA_Start(&hdma_usart1_tx,(u32)mUart[0].txdata,(uint32_t)&huart1.Instance->DR,len);	//开始发送
		}break;
		case 1:{
			HAL_DMA_Start(&hdma_usart2_tx,(u32)mUart[1].txdata,(uint32_t)&huart2.Instance->DR,len);	//开始发送
		}break;
		case 2:{
			HAL_DMA_Start(&hdma_usart3_tx,(u32)mUart[2].txdata,(uint32_t)&huart3.Instance->DR,len);	//开始发送
		}break;
		case 3:{
			HAL_DMA_Start(&hdma_uart4_tx,(u32)mUart[3].txdata,(uint32_t)&huart4.Instance->DR,len);	//开始发送
		}break;
		default:{
		}break;
	}
}

